package com.xueyi.aixihu.service.impl;

import com.xueyi.aixihu.entity.vo.DtAreaOrVillageVo;
import com.xueyi.aixihu.entity.vo.DtFindByAreaVo;
import com.xueyi.aixihu.entity.vo.DtUsersVo;
import com.xueyi.aixihu.entity.vo.SelectVo;
import com.xueyi.aixihu.mapper.DtAreaManageMapper;
import com.xueyi.aixihu.reqeust.DtAddVillageReq;
import com.xueyi.aixihu.reqeust.DtFindByAreaAndVillageReq;
import com.xueyi.aixihu.response.DtFindByAreaResponse;
import com.xueyi.aixihu.response.base.BaseResponse;
import com.xueyi.aixihu.service.DtAreaManageService;
import com.xueyi.aixihu.status.SystemCode;
import com.xueyi.aixihu.utils.Base64DecodedMultipartFile;
import com.xueyi.aixihu.utils.LogUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author yuyu
 * @date : 2022/8/17
 * @Description : 村/社区管理的实现类
 */
@Service
public class DtAreaManageServiceImpl implements DtAreaManageService {
    /**
     * 注入mapper层
     */
    @Autowired
    private DtAreaManageMapper dtAreaManageMapper;

    /**
     * 查询行政村/社区的集合
     *
     * @param dtFindByAreaAndVillageReq
     * @return
     */
    @Override
    public DtFindByAreaResponse findByAreaAndVillage(DtFindByAreaAndVillageReq dtFindByAreaAndVillageReq) {
        //创建响应类对象
        DtFindByAreaResponse dtFindByAreaResponse = new DtFindByAreaResponse();
        //判断获取到的总条数是否为空
        Integer count = dtAreaManageMapper.findByAreaAndVillageCount(dtFindByAreaAndVillageReq);
        List<DtFindByAreaVo> dtFindByAreaVos = new ArrayList<>();
        //如果不为空再进行查询数据库
        if (count > 0) {
            dtFindByAreaAndVillageReq.countStartIndex();
            //查询数据库
            dtFindByAreaVos = dtAreaManageMapper.findByAreaAndVillage(dtFindByAreaAndVillageReq);
            //封装集合
            dtFindByAreaResponse.setList(dtFindByAreaVos);
            dtFindByAreaResponse.setTotal(count);
            //封装code
            dtFindByAreaResponse.setCode(SystemCode.SUCCESS);
            dtFindByAreaResponse.setMsg("查询成功");
        } else {
            dtFindByAreaResponse.setCode(SystemCode.SUCCESS);
            dtFindByAreaResponse.setTotal(count);
            dtFindByAreaResponse.setList(dtFindByAreaVos);
            dtFindByAreaResponse.setMsg("没有数据");
        }
        //返回响应
        return dtFindByAreaResponse;
    }

    /**
     * 查询村或社区的个数
     *
     * @return
     */
    @Override
    public BaseResponse<DtAreaOrVillageVo> findByAreaOrVillageCount() {
        DtAreaOrVillageVo villageVo = dtAreaManageMapper.findByAreaOrVillageCount();
        return BaseResponse.success(villageVo);
    }


    /**
     * 添加村/社区
     *
     * @param dtAddVillageReq
     * @return
     */
    @Override
    public BaseResponse addVillage(DtAddVillageReq dtAddVillageReq) {
        //判断村名称是否符合格式不符合则报村的名称格式有误
        if (StringUtils.isBlank(dtAddVillageReq.getName()) ||
                dtAddVillageReq.getName().length() < 2 || dtAddVillageReq.getName().length() > 20
                && dtAddVillageReq.getIsSort().equals("1")) {
            return BaseResponse.build(SystemCode.QUERY_CHECK_ERROR, "村名称格式有误应当在2-20之间", null);

            //判断联系人是否符合格式 不符合报错
//        } else if (StringUtils.isBlank(dtAddVillageReq.getContacts()) ||
//                dtAddVillageReq.getContacts().length() < 1 || dtAddVillageReq.getContacts().length() > 10
//                && dtAddVillageReq.getIsSort().equals("1")) {
//            return BaseResponse.build(SystemCode.QUERY_CHECK_ERROR, "联系人格式有误 应当在1-10之间", null);

            //判断手机号的格式是否符合
//        } else if (StringUtils.isBlank(dtAddVillageReq.getPhone()) || dtAddVillageReq.getPhone().length() != 11
//                && dtAddVillageReq.getIsSort().equals("1")) {
            //return BaseResponse.build(SystemCode.QUERY_CHECK_ERROR, "手机号必须为11位", null);

            //判断简介是否符合
//        } else if (StringUtils.isBlank(dtAddVillageReq.getSynopsis()) ||
//                dtAddVillageReq.getSynopsis().length() < 5
//                        && dtAddVillageReq.getIsSort().equals("1")) {
//            return BaseResponse.build(SystemCode.QUERY_CHECK_ERROR, "简介格式有误 应当在5-100之间", null);
            //判断有没有输入类型
        } else if (dtAddVillageReq.getPid() == null
                && dtAddVillageReq.getIsSort().equals("1")) {
            return BaseResponse.build(SystemCode.QUERY_CHECK_ERROR, "类型为空", null);
            //判断是否与之同名的村
        } else if (dtAreaManageMapper.findByVillageName(dtAddVillageReq.getName()) > 0
                && dtAddVillageReq.getIsSort().equals("1")) {
            return BaseResponse.build(SystemCode.QUERY_CHECK_ERROR, "已经有该名称的社区或村", null);
        } else {
            //成功返回
            dtAddVillageReq.setCreateTime(new Date());
            //操作base64图片
            String info = Base64DecodedMultipartFile.operationBase64ImageInfo(dtAddVillageReq.getSynopsis());
            dtAddVillageReq.setSynopsis(info);
            dtAreaManageMapper.addVillage(dtAddVillageReq);
            //获取日志
            if (dtAddVillageReq.getIsSort().equals("1")) {
                LogUtil.buildUserLog(dtAddVillageReq.getId() + "", "【村/社区管理】用户" + DtUsersVo.findCurrentUser().getUsername()
                        + "新增了一个" + dtAddVillageReq.getName(), DtUsersVo.findCurrentUser(), null);
                return BaseResponse.success(null);
            } else {
                LogUtil.buildUserLog(dtAddVillageReq.getId() + "", "【文章管理】用户" + DtUsersVo.findCurrentUser().getUsername()
                        + "新增了一个" + dtAddVillageReq.getName(), DtUsersVo.findCurrentUser(), null);
                return BaseResponse.success(null);
            }

        }
    }

    /**
     * 查询单个村/社区数据
     *
     * @param id
     * @return
     */
    @Override
    public BaseResponse<DtFindByAreaVo> findByOneArea(Integer id) {
        if (id > 0) {
            DtFindByAreaVo oneArea = dtAreaManageMapper.findByOneArea(id);
            return BaseResponse.success(oneArea);
        } else {
            return BaseResponse.build(SystemCode.QUERY_CHECK_ERROR, "id不能为空", null);
        }
    }

    /**
     * 修改状态
     *
     * @param id
     * @param isValid
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public BaseResponse updateIsValid(Integer id, Integer isValid) {
        String str = "";
        if (id > 0) {
            if (isValid == null) {
                isValid = 2;
                str = "改为关闭状态";
            } else {
                isValid = isValid == 1 ? 0 : 1;
                if (isValid == 1) {
                    str = "改为正常状态";
                } else {
                    str = "改为禁用状态";
                }
            }
            dtAreaManageMapper.updateIsValid(id, isValid);
            //添加日志
            LogUtil.buildUserLog(id + "", "【村/社区管理】用户" + DtUsersVo.findCurrentUser().getUsername()
                    + "修改了" + dtAreaManageMapper.findByOneArea(id).getName() + "状态" + str, DtUsersVo.findCurrentUser(), null);
            return BaseResponse.success(null);
        } else {
            return BaseResponse.build(SystemCode.QUERY_CHECK_ERROR, "id不能为空", null);
        }
    }

    /**
     * 查询所有二级父类
     *
     * @return
     */
    @Override
    public BaseResponse<List<SelectVo>> findByParent() {
        List<SelectVo> list = dtAreaManageMapper.findByParent();
        if (list == null) {
            return BaseResponse.build(SystemCode.QUERY_CHECK_ERROR, "查询为空", null);
        } else {
            return BaseResponse.success(list);
        }
    }

    /**
     * 修改村镇信息
     *
     * @param dtFindByAreaVo
     * @return
     */
    @Override
    public BaseResponse updateVillageInformation(DtFindByAreaVo dtFindByAreaVo) {
        //判断村名称是否符合格式不符合则报村的名称格式有误
        if (StringUtils.isBlank(dtFindByAreaVo.getName()) ||
                dtFindByAreaVo.getName().length() < 2 || dtFindByAreaVo.getName().length() > 20) {
            return BaseResponse.build(SystemCode.QUERY_CHECK_ERROR, "村名称格式有误应当在2-20之间", null);

        }  else {
            //操作base64图片
            String info = Base64DecodedMultipartFile.operationBase64ImageInfo(dtFindByAreaVo.getSynopsis());
            dtFindByAreaVo.setSynopsis(info);
            dtAreaManageMapper.updateVillageInformation(dtFindByAreaVo);
            //获取日志
            LogUtil.buildUserLog(dtFindByAreaVo.getId() + "", "【村/社区管理】用户" + DtUsersVo.findCurrentUser().getUsername()
                    + "修改了一个" + dtFindByAreaVo.getName(), DtUsersVo.findCurrentUser(), null);
            return BaseResponse.success(null);
        }
    }
}
